package concurrencia;

import java.util.ArrayList;

import sistemaEnemigo.MisilEnemigo;
import escenario.IdPosEnemigo;

public class MonitorEspacio {

	protected SemaforoBinario lock;
	protected ArrayList <IdPosEnemigo> posEnemigos;
	protected ArrayList <MisilEnemigo> misilesEnemigos;
        
    /*Constructor*/
    public MonitorEspacio()
    {
        lock = new SemaforoBinario(1);
        misilesEnemigos = new ArrayList <MisilEnemigo>();
        posEnemigos = new ArrayList <IdPosEnemigo>();
    }
    
    /*Metodo para agregar elemento al array misilesEnemigos*/
    public synchronized void addMisilEnemigo(MisilEnemigo ME){
    	lock.cerrar();
		misilesEnemigos.add(ME);
		lock.abrir();
	}
    
	/*Metodo para remover elemento del array misilesEnemigos*/
	public synchronized void removeMisilEnemigo(MisilEnemigo ME){
		lock.cerrar();
		misilesEnemigos.remove(ME);
		lock.abrir();
	}
	
    /*Metodo para setear array misilesEnemigos*/
    public synchronized void setMisilEnemigo(int pos, MisilEnemigo PE)
    {
        lock.cerrar();
        misilesEnemigos.set(pos, PE);
        lock.abrir();
    }
	
	/*Metodo que retorna elemento del array misilesEnemigos*/
	public synchronized MisilEnemigo getMisilEnemigo(int pos){
		return misilesEnemigos.get(pos);
	}
	
	/*Metodo que retorna tamaño del array misilesEnemigos*/
	public synchronized int getSizeArrayME(){
		return  misilesEnemigos.size();
	}
    
    /*Metodo para agregar elemento al array posEnemigos*/
    public synchronized void addPosEnemigo(IdPosEnemigo PE)
    {
        lock.cerrar();
        posEnemigos.add(PE);
        lock.abrir();
    }
    
    /*Metodo para remover elemento del array posEnemigos*/
	public synchronized void removePosEnemigo(IdPosEnemigo PE)
	{
		lock.cerrar();
		posEnemigos.remove(PE);
		lock.abrir();
	}
    
    /*Metodo para setear array posEnemigos*/
    public synchronized void setPosEnemigos (int pos, IdPosEnemigo PE)
    {
        lock.cerrar();
		posEnemigos.set(pos, PE);
        lock.abrir();
    }
    
    /*Metodo que retorna elemento del array posEnemigos*/
	public synchronized IdPosEnemigo getPosEnemigo(int id)
	{
		return posEnemigos.get(id);
	}
	
	/*Metodo que retorna tamaño del array posEnemigos*/
	public synchronized int getSizeArrayPosEnemigos(){
		return  posEnemigos.size();
	}
	        
}
